package com.gaofei.hr.tasks;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;

import java.util.concurrent.ScheduledFuture;

/**
 * @author : gaofee
 * @date : 10:36 2021/6/3
 * @码云地址 : https://gitee.com/itgaofee
 */
@Component
public class OrderTask {

    private static final Logger LOGGER = LoggerFactory.getLogger(OrderTask.class);
    @Autowired
    private ThreadPoolTaskScheduler threadPoolTaskScheduler;



    private ScheduledFuture future;


    /**
     * 启动定时器
     */
    public void startTask() {
        // 第一个参数为定时任务要执行的方法，第二个参数为定时任务执行的时间
        future = threadPoolTaskScheduler.schedule(new Runnable() {
            @Override
            public void run() {
                //1.查询订单状态
                //如果订单的状态是未支付,把状态改成已关闭,并且停止定时任务endTask()
                System.out.println("===================>这是我的任务");
                /*if(status==未支付){
                    //订单状态改成已关闭
                    //回滚库存
                    //重新把订单保存数据库
                    //调用endTask()方法,关闭定时任务
                    endTask();
                }*/

            }
        }, new CronTrigger("0/5 * * * * *"));


    }

    /**
     * 定时任务执行的方法
     */
    public void test() {
        LOGGER.info(">>> DynamicScheduledTask ...");
        //1.查询订单状态
        //如果订单的状态是未支付,把状态改成已关闭,并且停止定时任务endTask()
    }

    /**
     * 停止定时器
     */
    public void endTask() {
        if (future != null) {
            future.cancel(true);
        }
    }

    /**
     * 改变调度的时间，先停止定时器再启动新的定时器
     */
    public void changeTask() {
        // 停止定时器
        endTask();
        // 定义新的执行时间,并启动
        future = threadPoolTaskScheduler.schedule(this::test, new CronTrigger("0/10 * * * * *"));
    }









    /*@Scheduled(initialDelay=5000,fixedRate = Long.MAX_VALUE)
    public void overtimeUnpaidProcessing(){
        System.out.println("============>>5s 后未支付取消订单!!!");
    }*/
}
